package com.wbk.lotterysystemuserservice.controller.auth.biz;

import com.wbk.lotterysystemuserservice.commons.bo.StoreApplyBO;
import com.wbk.lotterysystemuserservice.commons.dto.StoreDTO;
import com.wbk.lotterysystemuserservice.entity.Store;
import com.wbk.lotterysystemuserservice.entity.User;
import com.wbk.lotterysystemuserservice.service.StoreService;
import com.wbk.lotterysystemuserservice.service.UserInfoService;
import com.wbk.user.vo.StoreVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import result.Result;



@Component
public class StoreApplyBiz {

    @Autowired
    UserInfoService userInfoService;

    @Autowired
    StoreService storeService;

    @Transactional(propagation = Propagation.REQUIRED)
    public Result<StoreDTO> apply(StoreApplyBO storeApplyBO) {
        User user = userInfoService.getUserByUserNo(storeApplyBO.getUserNo());
        if (user == null) {
            return new Result<>(100, "找不到用户信息", null);
        }
        Store storeByUserNo = storeService.getStoreByUserNo(storeApplyBO.getUserNo());
        StoreDTO storeDTO = new StoreDTO();

        if (storeByUserNo != null) {
            if (storeByUserNo.getAuditStatus() == 2) {
                //修改申请
                BeanUtils.copyProperties(storeApplyBO, storeByUserNo);
                storeByUserNo.setAuditStatus((byte)0);
                storeByUserNo.setAuditOpinion("");
                Store store=storeService.update(storeByUserNo);
                BeanUtils.copyProperties(store, storeDTO);
                return new Result<>(200, "已成功修改，请耐心等候管理员审核，审核通过后会发邮件通知您", storeDTO);
            }
            return new Result<>(100, "该用户已申请商家认证", null);
        }
        //新增申请
        Store store = storeService.save(storeApplyBO);
        BeanUtils.copyProperties(store, storeDTO);
        storeDTO.setAuditStatus((byte) 0);
        return new Result<>(200, "已成功申请，请耐心等候管理员审核，审核通过后会发邮件通知您", storeDTO);
    }

    public Result<StoreVO> storeDetail(Long storeUserNo) {
        Store store = storeService.getStoreByUserNo(storeUserNo);
        if (store == null) {
            return new Result<>(100, "找不到相商家信息", null);
        }
        StoreVO storeVO = new StoreVO();
        BeanUtils.copyProperties(store, storeVO);
        return new Result<>(200, "商家信息", storeVO);
    }


}
